万字长文带你入门Docker 您所在的位置:网站首页 docker daocloud 万字长文带你入门Docker

万字长文带你入门Docker

#万字长文带你入门Docker| 来源: 网络整理| 查看: 265

1 Docker

dockerfiler  镜像构建

Compose是在单机进行容器编排 Horbor 镜像仓库 

Docker swarm 在多机进行容器编排

Docker Compose缺点是不能在分布式多机器上使用

Docker swarm缺点是不能同时编排多个服务,

Docker Stack,可以在分布式多机器上同时编排多个服务。

1.1 Docker常用命令

如果在使用 镜像或者是容器的别名有问题的话,就使用它的容器id

docker 服务 启动  停止  重启 查看 开机自启

systemctl    start |stop | restart | status|enable docker 

docker 镜像

docker images  查看镜像  docker search 搜索镜像    docker pull centos:7 拉取镜像 docker push 推送镜像  在推送镜像的时候需要先登录 docker rmi 删除镜像  docker rmi docker images -q  删除所有版本

docker 容器

docker ps  (-a 查看所有容器)  -l :显示最近创建的容器。 -n :列出最近创建的n个容器。

docker  start |stop | restart | status|enable  容器id    启动 停止 重启 查看  开机自启 

docker run  -i:表示运行容器  -t:启动后会进入其命令行 -d:后台运行

--name :创建的别名 -v:表示目录映射关系 -p:表示端口映射, /  如果一行写不下用/来换行

exec  进入运行时容器    示例docker exec -it 容器id /bin/bash 

logs -f  容器的日志  inspect 容器的信息信息 rm删除容器

Dockerfiler 

FROM 指定基础镜像  RUN  运行命令  EXPOSE 开放端口  ADD 复制文件到镜像 自动解压 docker build 构建示例    docker build -t reggie_take_out-1.0-SNAPSHOT.jar reggie.jar .  (-t表示 构建的文件 .是在当前目录)

docker-compose  docker-compose.yml  docker-compose config -q 坚持语法是否有问题

docker-compose up 启动  -d 后台启动  docker-compose down 停止

其他

docker cp 复制一个文件到容器内部  文件路径 容器名:文件路径    docker cp /root/F.sql mysql:/

1.2什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

把环境和项目进行打包,发布到docker仓库 

Docker应用场景

Web 应用的自动化打包和发布

自动化测试和持续集成、发布

在服务型环境中部署和调整数据库或其他的后台应 

docker 通过镜像和隔离机制来解决

DockerRUN

如果docker run hello-world

开始运行  docker会在本机寻找镜像,如果有就在本机运行,如果没有就去Dockerhup上下载,DockerHup是否可以找到,如果能找到就下载,找不到,就返回

Docke 如何工作的 是一个Client-Server结构系统,Docker的守护运行在主机上,通过Socket从客户端访问

DockerSever接收到Docker Client的指令

Docker 为什么比虚拟机更快

Docker 不需要在重新加载一个操作系统内核,而docker是利用宿主机的操作系统来操作的

1.3 docker 架构图

Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职

Docker Client 是一个客户端  systemctl start dcker    启动其客户端  进入客户端 然后才能发送一系列命令

docker run -d  也是这么一个意思

1 用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。

2 Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。

3 Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。

4 Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。

5 当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker容器网络环境。

6 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。

7 Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。

2 Docker基础使用

如果在安装docker 升级yum源 提升yum源找不到的话

  yum clean all  清理  然后重新加载一下 yum makecache

2.1 docker安装

2.1.1 docker安装

或者使用脚本文件安装

vim docker.sh

#!/bin/bash

yum install -y yum-utils

yum-config-manager \

   --add-repo \

   https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

mkdir -p /etc/docker && touch /etc/docker/daemon.json

cat > /etc/docker/daemon.json > /mydata/elasticsearch/config/elasticsearch.yml

4 添加权限

chmod -R 777 /mydata/elasticsearch/

5 运行容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \

-e "discovery.type=single-node" \

-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \

-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \

-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \

-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \

-d elasticsearch:7.4.2

kiban

docker pull kibana:7.4.2

docker run --name kibana \

-e ELASTICSEARCH_HOSTS=http://120.78.150.188:9200 -p 5601:5601 \

-d kibana:7.4.2

但是还要进行目录挂载修改 yml文件 设置中文

IK分词器

Ik分词器版本要和ES和Kibana版本保持一致 不然可能启动不了docker 

进入容器#此命令需要在容器中运行elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip

退出容器,重启容器

exit

docker restart es7.8

4.6 nacos

如果用docker安装naocs如果是 2版本可能会启动不了

docker pull nacos/nacos-server:1.3.1

docker  run \

--name nacos -d \

-p 8848:8848 \

--privileged=true \

--restart=always \

-e JVM_XMS=256m \

-e JVM_XMX=256m \

-e MODE=standalone \

-e PREFER_HOST_MODE=hostname \

nacos/nacos-server:1.3.1

访问测试 http://43.138.137.168:8848/nacos

4.7 MQ

docker run \

-e RABBITMQ_DEFAULT_USER=zhuxiaoyi \

-e RABBITMQ_DEFAULT_PASS=412826zxyZXY \

--name rabbitmq \

--hostname mq1 \

-p 15672:15672 \

-p 5672:5672 \

-d \

rabbitmq:3-management

4.8 Nginx

mkdir /root/docker/nginx

mkdir /root/docker/nginx/conf

由于我们现在没有配置文件,也不知道配置什么。可以先启动一个nginx,讲他的配置文件拷贝出来

再作为映射,启动真正的nginx

docker pull nginx:1.17.4

docker run --name some-nginx -d nginx:1.17.4

docker container cp some-nginx:/etc/nginx /root/docker/nginx/conf

然后就可以删除这个容器了

docker docker rm -f some-nginx

在重新启动nginx

docker run --name nginx -p 80:80 \

        -v /root/docker/nginx/conf:/etc/nginx \

        -v /root/docker/nginx/html:/usr/share/nginx/html \

        -d nginx:1.17.4

4.9 FTP服务器

1 需要账号和密码

docker run -v /data/dav:/usr/local/nginx/html  -d -p 88:80 lutixiaya/nwebdav:latest

chmod o+w /data/dav

ip+端口访问测试 需要输入账号和密码

使用winscp 进行连接

1、点击新建站点

2、选择协议

3、输入服务器ip

4、输入端口

5、输入用户名,默认用户:admin

6、输入密码,默认密码:bash.lutixia.cn

7、登录

https://zhuanlan.zhihu.com/p/573721115  参考链接

2 无需账号和密码

在同一个文件目录下准备好这个三个文件

start-nginx.sh

#!/bin/bash

mkdir data

docker stop nginx_file_server

docker rm nginx_file_server

docker run -d -p 8081:8080\

        --name nginx_file_server \

        -v $(pwd)/data:/data \

        -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf \

        -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \

        nginx:stable-alpine

nginx.conf

nginx.conf

user  root;

worker_processes  1;

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

http {

    include      /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    #tcp_nopush    on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

}

default.conf

default.conf

server {

    listen 8080; #端口

    server_name localhost; #服务名

    # for SSL listen port only

    #ssl_certificate                /etc/nginx/conf.d/server.pem;

    #ssl_certificate_key            /etc/nginx/conf.d/server-key.pem;

    #ssl_protocols                  TLSv1.2;

    #ssl_prefer_server_ciphers      on;

    #ssl_session_timeout            5m;

    #ssl_ciphers                    ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    #underscores_in_headers        on;

    charset utf-8; # 避免中文乱码

    root /data; #显示的根索引目录,注意这里要改成你自己的,目录要存在

    location / {

        autoindex on;            #开启索引功能

        autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)

        autoindex_localtime on;  # 显示本机时间而非 GMT 时间

    }

}

chmod +x start-nginx.sh && ./start-nginx.sh`

测试一下:

echo file_server > data/file1.txt

打开浏览器 http://127.0.0.1:8081/

4.10 DockerCompose

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

4.11 安装GitLab

1 下载镜像

docker pull twang2218/gitlab-ce-zh

2 启动容器

docker run -d -p 8443:443 -p 8090:80 -p 8022:22 --restart always --name gitlab -v /usr/local/gitlab/etc:/etc/gitlab -v /usr/local/gitlab/log:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab --privileged=true twang2218/gitlab-ce-zh

3 进入容器修改配置文件

由于进行了目录映射 也可以不在容器内部进行修改

docker exec -it gitlab bash

cd /etc/gitlab

vim /etc/gitlab/gitlab.yml

4 修改配置文件

搜索URL

external_url 'http://gitlab.example.com'

把url换成自己的

external_url 'http://116.205.133.97/'       

nginx['listen_port'] = nil

nginx['listen_port'] = 82    这个是注释掉的 

5 重启服务

这是在容器内部重启服务

gitlab-ctl restart

gitlab是有很多组件组成的只有这些组件都运行成功了,才启动成功。

6 访问测试

http://120.78.214.226:8090

第一次登录默认是root用户 密码自己设定  不要低于8位

4.12 安装Jenkins

1 下载镜像

docker pull jenkinsci/blueocean    中文版本

2 创建目录

# mkdir /home/jenkins_home

# chown -R 1000:1000 /home/jenkins_home/

# chown -R 1000:1000 /usr/local/src/jdk/jdk1.8/

# chown -R 1000:1000 /opt/apache-maven-3.5.0/

3 运行容器

docker run \

-d \

--name jenkins \

-p 9999:8080 \

-p 8888:8888 \

-p 50000:50000 \

-v /usr/local/src/jdk/jdk1.8:/usr/local/src/jdk/jdk1.8 \

-v /opt/apache-maven-3.5.0:/opt/apache-maven-3.5.0 \

-v/home/jenkins_home:/var/jenkins_home \

jenkins/jenkins:2.222.3-centos

4 查看密码

docker exec -it jenkins bash

cat /var/jenkins_home/secrets/initialAdminPassword

b0468f2eb870422abf509fe59f74e003

5 访问测试

http://120.78.214.226:9999/

6 进行汉化 

在安装插件页面输入 chinese

7 替换插件下载地址

https://blog.csdn.net/weixin_45878889/article/details/123867587

4.13 安装SonarQube

https://blog.csdn.net/OfficerGoodbody/article/details/126662724

新版SonarQube不支持MySQL

1 下载postgres镜像

docker pull postgres

2 创建文件

mkdir -p /opt/postgres/postgresql

mkdir -p /opt/postgres/data

3 创建网络

docker network create sonarqube

4 运行postgres 容器

docker run --name postgres -d -p 5432:5432 --net sonarqube \

-v /opt/postgres/postgresql:/var/lib/postgresql \

-v /opt/postgres/data:/var/lib/postgresql/data \

-v /etc/localtime:/etc/localtime:ro \

-e POSTGRES_USER=sonar \

-e POSTGRES_PASSWORD=sonar \

-e POSTGRES_DB=sonar \

-e TZ=Asia/Shanghai \

--restart always \

--privileged=true \

--network-alias postgres \

postgres:latest

5 安装 sonarQube

docker pull sonarqube

6 准备文件夹

mkdir -p /opt/sonarqube

echo "vm.max_map_count=262144" > /etc/sysctl.conf

sysctl -p

7 先运行一下拷贝文件

docker run -d --name sonarqube sonarqube

docker cp sonarqube:/opt/sonarqube/conf /opt/sonarqube

docker cp sonarqube:/opt/sonarqube/data /opt/sonarqube

docker cp sonarqube:/opt/sonarqube/logs /opt/sonarqube

docker cp sonarqube:/opt/sonarqube/extensions /opt/sonarqube

8 删除容器

docker stop  sonarqube

docker rm  sonarqube

9 添加权限

chmod -R 777 /opt/sonarqube/

10 修改配置文件

vim /opt/sonarqube/conf/ sonar.properties

修改账号和密码

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar

sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar

11 运行容器

docker run -d --name sonarqube -p 9090:9000 \

-e ALLOW_EMPTY_PASSWORD=yes \

-e SONARQUBE_DATABASE_USER=sonar \

-e SONARQUBE_DATABASE_NAME=sonar \

-e SONARQUBE_DATABASE_PASSWORD=sonar \

-e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \

--net sonarqube \

--privileged=true \

--restart always \

-v /opt/sonarqube/logs:/opt/sonarqube/logs \

-v /opt/sonarqube/conf:/opt/sonarqube/conf \

-v /opt/sonarqube/data:/opt/sonarqube/data \

-v /opt/sonarqube/extensions:/opt/sonarqube/extensions\

sonarqube

12测试访问

浏览器输入http://ip:9090,开始初始化数据库初始化成功后进入登录界面,账号:admin  密码:admin

4.14 Zabbix

docker-compose

1 安装git

yum -y install git

2 下载 代码

git clone https://github.com/zabbix/zabbix-docker

注意要把整个代码下载下来不要只下载docker-compose文件否则会报错  因为缺失 数据库文件 

3 进入到 abbix-docker目录

4 启动docker-compose

docker-compose -f docker-compose_v3_centos_mysql_latest.yaml up -d

5 web界面访问

http://120.46.214.226

http:ip:端口/zabbix,默认端口80,httpd服务端口

默认登录用户 Admin ,密码 zabbix

5 docker可视化工具

轻量级portanier

  下载  docker pull lihaixin/portainer

docker run -d -p 9000:9000 --restart=always \

-v /var/run/docker.sock:/var/run/docker.sock \

--name portainer lihaixin/portainer

访问测试  http://43.138.137.168:9000/#/home

重量级 容器监控

docker-compose.yml配置 

version: '3.1'

volumes:

  grafana_data: {}

services:

influxdb:

  image: tutum/influxdb:0.9

  restart: always

  environment:

   - PRE_CREATE_DB=cadvisor

  ports:

   - "8083:8083"

   - "8086:8086"

  volumes:

   - ./data/influxdb:/data

cadvisor:

  image: google/cadvisor

  links:

   - influxdb:influxsrv

  command:

  -storage_driver=influxdb - storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086

  restart: always

  ports:

   - "8080:8080"

  volumes:

   - /:/rootfs:ro

   - /var/run:/var/run:rw

   - /sys:/sys:ro

   - /var/lib/docker/:/var/lib/docker:ro

grafana:

  user: "104"

  image: grafana/grafana

  user: "104"

  restart: always

  links:

   - influxdb:influxsrv

  ports:

   - "3000:3000"

  volumes:

   - grafana_data:/var/lib/grafana

  environment:

   - HTTP_USER=admin

   - HTTP_PASS=admin

   - INFLUXDB_HOST=influxsrv

   - INFLUXDB_PORT=8086

   - INFLUXDB_NAME=cadvisor

   - INFLUXDB_USER=root

   - INFLUXDB_PASS=root

关于我

我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题

1 V 15938366900 QQ 1576664340

2 微信公众号  朱啸毅



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有